<?php

class VotanteDAO {

    public function traerLista($id_encuesta, $id_controlador){
        $query = "SELECT votantes.nombre, votantes.email, votantes_encuestas.voto, votantes_encuestas.hash
        FROM votantes_encuestas_controladores
        JOIN votantes ON (votantes_encuestas_controladores.id_votante = votantes.id)
        JOIN votantes_encuestas ON 
        (votantes_encuestas_controladores.id_votante = votantes_encuestas.id_votante)
        WHERE votantes_encuestas_controladores.id_encuesta = $id_encuesta
            AND votantes_encuestas_controladores.id_usuario = $id_controlador";

        $res = mysql_query($query) or die("ERR SQL");

        $votantes = array();

        while(($fila = mysql_fetch_assoc($res))){
            $votantes[] = new Votante(null, $fila['nombre'], $fila['email'],
                            $id_encuesta, $id_controlador, $fila['voto'], $fila["hash"]);

        }

        return $votantes;
    }

    public function persistirLista($votantes){
        
        foreach($votantes as $votante)
            $this->persistir($votante);
    }

    public function persistir($votante){
        
        //VERIFICACION SI EXISTE EL MAIL
        $query = "SELECT id FROM votantes WHERE email = '" . $votante->getEmail() . "'";
        $res = mysql_query($query) or die("ERR SQL");
        $fila = mysql_fetch_array($res);
        $flag_new = false;

        if(!$fila){
            //INSERT NUEVO VOTANTE
            $query = "INSERT INTO votantes (nombre, email)
                VALUES('{$votante->getNombre()}', '{$votante->getEmail()}')";
            mysql_query($query) or die("ERR SQL");
            $votante->setId(mysql_insert_id());
            $this->asociarAEncuesta($votante);
            $this->asociarAEncuestaControlador($votante);
            return $votante->getId();
        }
        
        $votante->setId($fila[0]);
            
        if(!$this->estaAsociadoAEncuesta($votante))
            $this->asociarAEncuesta($votante);

        if(!$this->estaAsociadoAEncuestaControlador($votante))
            $this->asociarAEncuestaControlador($votante);

        return $votante->getId();
    }

    public function estaAsociadoAEncuesta($votante){
        $query = "SELECT count(*) FROM votantes_encuestas WHERE id_encuesta = " . $votante->getIdEncuesta()
        . " AND id_votante = " . $votante->getId();
        
        $res = mysql_query($query) or die("Error SQL");

        $fila = mysql_fetch_array($res);
        
        if($fila[0] > 0)
            return true;
        else
            return false;
    }

    public function estaAsociadoAEncuestaControlador($votante){
       $query = "SELECT count(*) FROM votantes_encuestas_controladores WHERE id_encuesta = " . $votante->getIdEncuesta()
        . " AND id_votante = " . $votante->getId() . " AND id_usuario = " . $votante->getIdControlador();
        $res = mysql_query($query) or die("E SQL $query");
        $fila = mysql_fetch_array($res);
        if($fila[0] > 0)
            return true;
        else
            return false;
    }
    
    public function asociarAEncuesta($votante){
        $hash = md5($votante->getId() . $votante->getIdEncuesta() . date('dms'));
        $query = "INSERT INTO votantes_encuestas (id_votante, id_encuesta, hash)
                VALUES (" . $votante->getId() . ", " . $votante->getIdEncuesta() . ", '$hash')";
        mysql_query($query) or die("ERR SQL $query");
    }
    
    public function asociarAEncuestaControlador($votante){
        $query = "INSERT INTO votantes_encuestas_controladores (id_votante, id_encuesta, id_usuario)
                VALUES (" . $votante->getId() . ", " . $votante->getIdEncuesta() . ", "
                . $votante->getIdControlador() . ")";
        mysql_query($query) or die("ERR SQL");
    }

    public function validarEmail($email){
        return true;
        /*if(!filter_var($email, FILTER_VALIDATE_EMAIL))
            return false;

        return true;*/
    }
}
?>
